package PersonStu.sanqi;

/**
 * @Author：DijaH
 * @Date：2022/12/29 5:44 下午
 * @Version：1.0.0
 * @Description： 先手后手拿牌，返回拿到的最大的累价值
 */
public class code_22_CardsLine {
    public static int getMax(int [] arr){
        if(arr.length == 0 || arr == null){
            return 0;
        }

        //先手
        int first = f1(arr,0,arr.length - 1);
        //后手
        int second = g1(arr,0,arr.length - 1);
        return Math.max(first,second);
    }

    //先手拿到最好的
    public static int f1(int[] arr,int L,int R){
        if(L == R){
            return arr[L];
        }
        int p1 = arr[L] + g1(arr,L + 1,R);
        int p2 = arr[R] + g1(arr,L,R - 1);
        return Math.max(p1,p2);
    }

    //后手拿到最好的
    private static int g1(int[] arr, int L, int R) {
        if(L == R){
            return 0;
        }
        int p1 =arr[L] +  f1(arr,L+1,   R);
        int p2 = arr[R] + f1(arr,L,R - 1);
        return Math.min(p1,p2);

    }




}
